perm filename FASDFS.MID[MAC,LSP]2 blob
sn#293537 filedate 1980-02-13 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00012 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002
C00006 00003
C00010 00004
C00012 00005
C00014 00006
C00017 00007
C00021 00008
C00023 00009
C00028 00010
C00032 00011
C00041 00012
C00043 ENDMK
C⊗;
;;; **************************************************************
;;; ***** MACLISP ****** STANDARD AC, UUO, AND MACRO DEFINITIONS *
;;; **************************************************************
;;; ** (C) COPYRIGHT 1976 MASSACHUSETTS INSTITUTE OF TECHNOLOGY **
;;; ****** THIS IS A READ-ONLY FILE! (ALL WRITES RESERVED) *******
;;; **************************************************************
;;; THIS FILE CONTAINS:
;;; STANDARD SYMBOLIC ACCUMULATOR DEFINITIONS.
;;; UUO DEFINITIONS:
;;; ERROR CALLS AND STRING TYPEOUT.
;;; COMPILED CODE TO INTERPRETER INTERFACES.
;;; VARIOUS UUOS USEFUL FROM DDT.
;;; .GLOBAL DECLARATIONS.
;;; .FORMAT DECLARATIONS.
;;; GENERAL MACRO DEFINITIONS [THAT ANY LOSER MIGHT WANT].
;;; SYMBOLIC NAMES RELATED TO ARRAYS.
;;; SYMBOLIC NAMES RELATED TO FILES.
;;; THE DEFINITIONS FOR MACLISP CONTAINED HEREIN
;;; ARE RELATIVELY STABLE. THIS FILE MAY BE .INSRT'D BY MIDAS
;;; FILES ASSEMBLED IN .FASL MODE TO DEFINE THESE THINGS.
;;; THE .GLOBAL DECLARATIONS IN PARTICULAR ARE FOR THE
;;; BENEFIT OF THESE .FASL FILES.
;;; IT IS A GOOD IDEA FOR .FASL FILES TO USE THE FASEND MACRO
;;; IN PLACE OF THE USUAL END STATEMENT.
SUBTTL ACCUMULATOR USAGE
NIL=0 ;ATOM HEADER FOR NIL
A=1 ;ARG 1; VALUE; MARKED FROM BY GC
B=2 ;ARG 2; MARKED FROM BY GC
C=3 ;ARG 3; MARKED FROM BY GC
AR1=4 ;ARG 4; MARKED FROM BY GC
AR2A=5 ;ARG 5; MARKED FROM BY GC
NACS==5 ;NUMBER OF ACS MARKED FROM BY GC - NO OTHER ACS MARKED
T=6 ;-<NO. OF ARGS> FOR LSUBR CALL; ALSO USED FOR JSP T,
TT=7 ;TEMP; OFTEN USED FOR ARGS TO INTERNAL ROUTINES
D=10 ;SOMEWHAT LESS TEMPORARY THAN TT
R=11 ;DITTO; SOMETIMES USED FOR JSP R,
F=12 ;SOMEWHAT LESS TEMPORARY THAN D AND R
FREEAC=13 ;UNUSED BY LISP, EXCEPT SAVED-USED-RESTORED BY GC
P=14 ;SUBROUTINE AND SYSTEM PDL POINTER ("REGULAR PDL")
FLP=15 ;FLONUM PDL POINTER ("FLOPDL")
FXP=16 ;FIXNUM PDL POINTER ("FIXPDL")
SP=17 ;LAMBDA-BINDINGS PDL POINTER ("SPECIAL PDL")
;;; PDL POINTERS ARE ALWAYS KEPT IN ACS. PDL POINTERS ARE NOT
;;; MARKED FROM, BUT PDL DATA ON REGULAR AND SPECIAL PDLS ARE
;;; PROTECTED FROM GARBAGE COLLECTION.
;;; FLP IS NOT USED BY LISP, EXCEPT AT LDATFL AND ERRIOJ,
;;; BUT PRIMARILY BY COMPILED NUMERICAL CODE.
;;; DO NOT DO RANDOM PUSH/POPS ON SP - USE BIND AND UNBIND ROUTINES.
;;; A FEW RANDOMLY USEFUL DEFINITIONS TO KEEP THINGS SYMBOLIC
;;; BUT WATCH OUT! DONT JUST RANDOMLY THINK YOU CAN CHANGE NASCII
;;; AND HAVE THINGS WIN, ESPECIALLY THE PACKING OF CHARS FOR
;;; PNAMES, AND THE SPECIAL OBARRAY ENTRIES FOR SCOS.
NASCII==200 ;NUMBER OF ASCII CHARS
BYTSWD==5 ;NUMBER OF ASCII BYTES PER WORD
SUBTTL TABLE OF GLOBAL SYMBOLS USED BY COMPILED FUNCTIONS
DEFINE GLBSYM B
IRP A,,[.SET,.MAP,PRINTA,SPECBIND,UNBIND,IOGBND,.LCALL
.UDT,ARGLOC,INUM,ST,FXNV1,PDLNMK,PDLNKJ,FIX1A
FIX1,FLOAT1,IFIX,IFLOAT,FXCONS,FLCONS,ERSETUP,ERUNDO
GOBRK,CARCDR,.STORE,NPUSH,PA3,QUNBOUND,FLTSKP,FXNV2
FXNV3,FXNV4,FIX2,FLOAT2,AREGET]
B
TERMIN
IFE QIO,[IRP A,,[UINITA,UTIN]
B
TERMIN
]
IFN QIO,[IRP A,,[INTREL,INTREL]
B
TERMIN
]
IRP A,,[INTREL,INHIBIT,NOQUIT,CHECKI,0PUSH,0.0PUSH,NILPROPS,VBIND,%CXR,%RPX]
B
TERMIN
TERMIN
DEFINE SIXSYM B ;SIXBIT NAMES -- MUST MATCH GLBSYM
IRP A,,[*SET,*MAP,PRINTA,SPECBIND,UNBIND,IOGBND,*LCALL
*UDT,ARGLOC,INUM,NUMVAL,FXNV1,PDLNMK,PDLNKJ,FIX1A
FIX1,FLOAT1,IFIX,IFLOAT,FXCONS,FLCONS,ERSETUP,ERUNDO
GOBRK,CARCDR,*STORE,NPUSH,PA3,MAKUNBOUND,FLTSKP,FXNV2
FXNV3,FXNV4,FIX2,FLOAT2,AREGET]
B
TERMIN
IFE QIO,[IRP A,,[UINITA,UTIN]
B
TERMIN
]
IFN QIO,[IRP A,,[INTREL,INTREL]
B
TERMIN
]
IRP A,,[INTREL,INHIBIT,NOQUIT,CHECKI,0PUSH,0*0PUSH,NILPROPS,VBIND,%CXR,%RPX]
B
TERMIN
TERMIN
;;; ADDITIONAL SYMBOLS FOR LAP AND .FASL HACKERS
DEFINE XTRSYM B
IFN ITS,[
IRP A,,[GETCOR,RINTERN]
B
TERMIN
] ;END OF IFN ITS
IFN BIGNUM,[
IRP A,,[BNCONS,NVSKIP]
B
TERMIN
] ;END OF IFN BIGNUM
IRP A,,[CPOPJ,CCPOPJ,POPAJ,POP1J,CINTREL,LWNACK,SIXMAK,SQUEEZE]
B
TERMIN
IFN QIO,[
IRP A,,[ALFILE,ALCHAN,XFILEP,FIL6BT,6BTNML,SIXATM,READ0A]
B
TERMIN
] ;END OF IFN QIO
IFN JOBQIO,[
IRP A,,[JOBTB,LOJOBA]
B
TERMIN
] ;END OF IFN JOBQIO
TERMIN
;;; SYMBOLS FOR COMPILED CODE
IFNDEF ITS, ITS==1
IFNDEF BIGNUM, BIGNUM==1
IFNDEF QIO, QIO==1
IFNDEF JOBQIO, JOBQIO==1
GLBSYM [.GLOBAL A]
XTRSYM [.GLOBAL A]
SUBTTL SYMBOLS FOR NUMBER-OF-ARGS CHECKING, AND .FORMAT
;;; SYMBOLS TO BE USED WITH FWNACK AND LWNACK.
;;; ORDINARILY ONE WRITES
;;; JSP TT,FWNACK
;;; FAXXX,,QZZZZZ
;;; IN EACH SYMBOL, THE 3.1 BIT (THESE ARE LEFT-HALF SYMBOLS)
;;; MEANS FSUBR. THE 3.2 BIT MEANS 0 ARGS IS OKAY; 3.3, 1 ARG;
;;; 3.4, 2 ARGS; ... ; 4.8, 15. ARGS; 4.9, > 15. ARGS.
;;; ITEMS IN THIS IRP MUST HAVE FIRST FOUR CHARS UNIQUE!!!
;;; IF YOU ADD STUFF HERE, ALSO FIX UP FASEND.
IRP X,,[02,1N,12,23,2N,0,1,2,4,01,012,01234,0234,3456,1234567
13456,234,345,234567,76543]
LA!X==0
IRPC Q,,[X]
IFSN Q,N, LA!X==LA!X+2←Q
.ALSO ZZ==Q
.ELSE LA!X==LA!X+<<777774←ZZ>&7777777>
TERMIN
FA!X==LA!X+1
TERMIN
;;; THE FOLLOWING FORMATS ARE HEREBY DECLARED ILLEGAL AS
;;; BEING REDUNDANT AND/OR GROSSLY CONFUSING.
;;; SEE THE MIDAS MANUAL FOR DETAILS.
;;; ,A
;;; ,A C
;;; ,A,
;;; ,A,C
;;; A B C
;;; A,
;;; A,B
;;; A,B C
;;; A,B,
;;; A,B,C
IRP X,,[14,15,16,17,25,30,34,35,36,37]
.FORMAT X,0
TERMIN
%SY==1,,537777 ;FLAG BITS FOR SQUOZE SYMBOLS IN DDT
%SYHKL==400000 ;HALF KILLED
%SYKIL==200000 ;FULLY KILLED
%SYLCL==100000 ;LOCAL
%SYGBL==40000 ;GLOBAL
SUBTTL GENERAL MACROS
DEFINE CONC A,B ;HAIRY CONCATENATOR MACRO
A!B!TERMIN
DEFINE % ;THIS IS GOOD FOR LIST STRUCTURE
,,.+1!TERMIN
DEFINE LOCKI ;LOCK OUT USER INTERRUPTS UNTIL UNLOCKI'D
PUSH FXP,INHIBIT
SETOM INHIBIT
TERMIN
DEFINE UNLOCKI ;RELEASE THE USER-INTERRUPT LOCK, AND CHECK TO SEE
PUSHJ P,INTREL ;IF ANY INTERRUPTS WERE STACKED UP WHILE IN LOCKED STATE
TERMIN
DEFINE LOCKTOPOPJ ;LOCK ALL THE ENSUING CODE UNTIL THE
PUSH P,CINTREL ;EXITING POPJ P,
LOCKI
TERMIN
DEFINE UNLKPOPJ ;UNLOCK, THEN POPJ P,
JRST INTREL
TERMIN
IRP PL,,[,FX]
DEFINE SAVE!PL AL/ ;CALLED LIKE SAVE A B C
IRPS AC,,AL
PUSH PL!P,AC
TERMIN
TERMIN
DEFINE RSTR!PL AL/ ;CALLED LIKE RSTR C B A
IRPS AC,,AL
POP PL!P,AC
TERMIN
TERMIN
TERMIN
DEFINE MACROLOOP COUNT,NAME,C ;FOR EXPANDING MANY MACROS
IFSN C,, .CRFOFF
REPEAT COUNT,[ CONC NAME,\.RPCNT
]
IFSN C,, .CRFON
TERMIN
IF1,[
;;; FEATURE SO THAT HAIRY SUMS OF BITS MAY BE WRITTEN NICELY.
;;; BITMAC FOO,FOO.
;;; CAUSES THE FORM
;;; FOO<A+B+C>
;;; TO EXPAND INTO THE FORM
;;; FOO.A+FOO.B+FOO.C
NBITMACS==0
DEFINE BITMAC XX,YY,ZZ=[1,,525252]
DEFINE XX<BITS>
IRPS J,K,[BITS]
YY!!J!K!TERMIN TERMIN
BITMA1 XX,YY,[ZZ]\NBITMACS
NBITMACS==NBITMACS+1
TERMIN
DEFINE BITMA1 XX,YY,ZZ,NN
DEFINE BTMC!NN
EXPUNGE XX,YY
XX==ZZ
YY==ZZ
IFSN [ZZ], IFGE <.TYPE ZZ>, EXPUNGE ZZ
TERMIN
TERMIN
IRP FOO,,[%TB,%TI,%TJ,%TX,%TO,%TS,%TC,%TG,%TT,%PI,%PJ]
IFDEF FOO, SV$!FOO==FOO .SEE BITMAC
.ELSE SV$!FOO==1,,525252
EXPUNGE FOO
TERMIN
BITMAC AS,AS. ;LH ASARS
BITMAC TTS,TTS. ;LH TTSARS
BITMAC FBT,FBT. ;LH F.MODE WORD IN FILE ARRAYS
BITMAC RS.,RS. ;FOR READER SYNTAX BITS
BITMAC RS%,RS%,525252 ;READER SYNTAX BITS, LH SHIFTED INTO RH
BITMAC IB,IB.,[525252,,525252] ;WORD 1 INTERRUPT BITS
BITMAC %TB,%TB,SV$%TB ;LH .TTY USER VARIABLE
BITMAC %TI,%TI,SV$%TI ;LH TTY IOCHNM BITS (SOME PER-IOT)
BITMAC %TJ,%TJ,SV$%TJ
BITMAC %TX,%TX,SV$%TX ;RH TTY CHARACTER BITS
BITMAC %TO,%TO,SV$%TO ;LH TTYOPT VARIABLE
BITMAC %TS,%TS,SV$%TS ;LH TTYSTS VARIABLE
BITMAC %TC,%TC,SV$%TC ;LH TTYCOM VARIABLE
BITMAC %TG,%TG,SV$%TG ;6-BIT BYTE TTYST1,TTYST2 GROUPS
BITMAC %TT,%TT,SV$%TT ;LH TTYTYP VARIABLE
BITMAC %PI,%PI,SV$%PI ;FULL WORD .PIRQC VARIABLE
BITMAC %PJ,%PJ,SV$%PJ ;LH .PIRQC VARIABLE
] ;END OF IF1
DEFINE INFORM R,S,T,U,V,W,X,Y,Z,$,%
PRINTX ≤ R!S!T!U!V!W!X!Y!Z!$!%
≤
TERMIN
DEFINE WARN R,S,T,U,V,W,X,Y,Z,$,%
WARN1 [R!S!T!U!V!W!X!Y!Z!$!%]
TERMIN
DEFINE WARN1 CRUFT
IFL 40-.LENGTH ≤CRUFT≤,[ .ERR ######
PRINTX ≤ ###### CRUFT
≤
]
.ELSE .ERR ###### CRUFT
TERMIN
;;; MACRO FOR .FASL LOSERS WHO .INSRT THIS FILE TO USE
;;; IN PLACE OF THE "END" PSEUDO. THIS GENERATES AN "END"
;;; AFTER PERFORMING SOME CLEANUP. MANY SYMBOLS ARE EXPUNGED
;;; SO THAT .FASL FILES WILL NOT SPEND INFINITE TIME TRYING TO
;;; PASS THEM TO DDT.
DEFINE FASEND
IF2,[
EXPUNGE QIO NASCII
EXPUNGE NIL A B C AR1 AR2A NACS T TT D R F FREEAC P FLP FXP SP
EXPUNGE LERR ACALL AJCALL LER3 ERINT PP STRT SERINT TP IOJRST UUOMAX
EXPUNGE CALL JCALL CALLF JCALLF NCALL NJCALL NCALLF NJCALF NUUOCLS
EXPUNGE NERINT
EXPUNGE %UDF %UBV %WTA %UGT %WNA %GCL %FAC %IOL
EXPUNGE %%UDF %%UBV %%WTA %%UGT %%WNA %%GCL %%FAC %%IOL
EXPUNGE ASAR TTSAR
EXPUNGE AS.JOB AS.FIL AS.RDT AS.OBA AS.SX AS.FX AS.FL AS.GCP
EXPUNGE TTS.CL TTS.IM TTS.BN TTS.TY TTS.IO TTS.CN TTS.GC
EXPUNGE TTSDIM TTS.1D TTS.2D TTS.3D TTS.4D TTS.5D
EXPUNGE FI.EOF FO.EOF FI.BBC FI.BBF TI.BFN FT.CNS F.GC
EXPUNGE F.MODE FBT.CM FBT.SA FBT.CP FBT.LN FBT.AP FBT.CC FBT.FR
EXPUNGE F.CHAN F.DEV F.SNM F.PPN F.FN1 F.FN2
EXPUNGE F.RDEV F.RSNM F.RFN1 F.RFN2 F.FPOS LOPOFA
EXPUNGE TI.ST1 TO.TYP TI.ST2 ATO.LC
EXPUNGE AT.CHS AT.LNN AT.PGN FO.LNL FO.PGL FB.IOT LONBFA
EXPUNGE FB.BFL AB.CNT FB.STS AB.BP FB.NBF XB.AOB FB.WDC FB.BUF
IRPC X,,[AXI]
IRPC Y,,[DT]
IRPC Z,,[IO]
EXPUNGE X!!Y!!Z!C.SZ X!!Y!!Z!B.BS X!!Y!!Z!B.SZ
TERMIN
TERMIN
TERMIN
EXPUNGE J.INTF J.LFNM J.GC J.INTB J.STAD LOJOBA J.SYMS
IRP X,,[02,1N,12,23,2N,0,1,2,4,01,012,01234,0234,3456,1234567
13456,234,345,234567,76543]
EXPUNGE LA!X FA!X
TERMIN
MACROLOOP NBITMACS,BTMC,*
] ;END OF IF2
END
TERMIN
;;; USEFUL MACRO FOR .FASL FILES. CAUSES LOADING TO PRINT MESSAGE.
DEFINE VERPRT NAME
.SXEVAL (COND ((STATUS NOFEATURE NOLDMSG)
(COND ((STATUS FEATURE NEWIO)
(TERPRI MSGFILES)
(TYO #73 MSGFILES)
(PRINC (QUOTE LOADING/ NAME/ ) MSGFILES)
(DO ((N #<.FNAM2> (LSH N #6 )))
((ZEROP N))
(TYO (PLUS #40 (LSH N #-30. ))
MSGFILES)))
(T (TERPRI)
(TYO #73 )
(PRINC (QUOTE LOADING/ NAME/ ))
(DO ((N #<.FNAM2> (LSH N #6 )))
((ZEROP N))
(TYO (PLUS #40 (LSH N #-30. ))))))))
TERMIN
SUBTTL ONE-LINE CONDITIONAL MACROS
;;; HOPEFULLY THESE WILL HELP MAKE SOME CODE LESS MESSY TO READ.
;;; PREFACING A LINE OF CODE WITH ONE OF THESE SYMBOLS TELLS MIDAS
;;; TO ASSEMBLE THAT LINE ONLY UNDER THE SPECIFIED CONDITION.
;;; EXAMPLE:
;;;
;;; FOO: MOVE A,(P)
;;; 10$ PUSHJ P,10HACK ;THIS LINE IS FOR DEC-10 ONLY
;;; MOVE A,-1(P)
;;; NW% PUSHJ P,OLDHAK ;THIS LINE IS FOR OLD I/O ONLY
;;; POPJ P,
DEFINE 10$
IFN D10,TERMIN
DEFINE 10%
IFN ITS,TERMIN
DEFINE SA%
IFE SAIL,TERMIN
DEFINE SA$
IFN SAIL, TERMIN
DEFINE 10X
IFN TENEX,TERMIN
;;; EVENTUALLY, SWITCH "PAGING" AND PG$, PG% WILL BE GOOD IDEA.
;;; FOOLISH NEW READER FLAG (HISTORICAL ARTIFACT -- FLUSH EVENTUALLY)
DEFINE NW$
IFN NEWRD,TERMIN
DEFINE NW%
IFE NEWRD,TERMIN
DEFINE Q%
IFE QIO,TERMIN
DEFINE Q$
IFN QIO,TERMIN
DEFINE BG$
IFN BIGNUM,TERMIN
DEFINE BG%
IFE BIGNUM,TERMIN
SUBTTL FORMAT OF ARRAYS
;;; ARRAYS ARE POINTED TO BY A TWO-WORD SAR (SPECIAL ARRAY CELL).
;;; SARS RESIDE IN A SPECIAL SPACE CALLED SAR SPACE.
ASAR==0 ;SAR POINTER POINTS TO ASAR (CODE DEPENDS ON THIS)
TTSAR==1 ;TTSAR COMES JUST AFTER IT
;;; THE FIRST WORD OF THE SAR, CALLED THE ASAR, POINTS TO THE ARRAY
;;; HEADER; PUSHJ'ING INDIRECTLY THOUGH IT GETS TO THE ARRAY
;;; SUBSCRIPT EVALUATION CODE. THE LEFT HALF, EXCLUDING THE
;;; INDIRECT AND INDEX BITS, CONTAINS VARIOUS BITS DESCRIBING
;;; THE TYPE OF THE ARRAY:
AS.JOB==10000 ;JOB ARRAY (IN QIO ONLY)
AS.FIL==4000 ;FILE ARRAY (IN QIO ONLY)
AS.RDT==2000 ;READTABLE
AS.OBA==1000 ;OBARRAY
AS.SX==400 ;S-EXPRESSION ;THESE ARE ACCESS
AS.FX==200 ;FIXNUM ; METHODS - AT LEAST
AS.FL==100 ;FLONUM ; ONE MUST BE ON
AS.GCP==40 ;GC SHOULD USE AOBJN PTR TO MARK ARRAY
;;; THE SECOND WORD, CALLED THE TTSAR, POINTS TO THE ARRAY DATA
;;; AND IS INDEXED BY ACCUMULATOR TT. ITS LEFT HALF, EXCLUDING
;;; AGAIN THE INDIRECT AND INDEX BITS, CONTAIN MORE INFORMATION
;;; ABOUT THE ARRAY:
TTS.CL==40000 ;CLOSED FILE
TTS.IM==2000 ;1 => IMAGE ;BOTH 0
TTS.BN==1000 ;1 => BINARY (FIXNUM) ; => ASCII
TTS.TY==400 ;0 => DSK-TYPE, 1 => TTY
TTS.IO==200 ;0 => IN, 1 => OUT
TTS.CN==100 ;COMPILED CODE NEEDS THIS SAR
TTS.GC==40 ;USED AS MARK BIT BY GC
TTSDIM==410300 ;BYTE POINTER FOR # OF DIMENSIONS (1-5)
TTS.1D==100000 ;DEFINITIONS
TTS.2D==200000 ; FOR SPECIFYING
TTS.3D==300000 ; NUMBER OF
TTS.4D==400000 ; ARRAY
TTS.5D==500000 ; DIMENSIONS
;;; S-EXPRESSION ARRAYS HAVE THE FOLLOWING FORM:
;;; -<# WDS FOR GC MARK>,,<1ST WD OF DATA TO MARK>
;;; HEADER: JSP TT,<N>DIMS ;ASAR POINTS HERE; N=# OF DIMS
;;; <ADDRESS OF SAR> ;LH USED BY FLASH
;;; <DIMENSION 1>
;;; ...
;;; <DIMENSION N>
;;; DATA: <ENTRY 0>,,<ENTRY 1> ;TTSAR POINTS HERE
;;; ... ;DATA PACKED 2/WD
;;; <ENTRY X-1>,,<ENTRY X>
;;;
;;; THE FORMAT OF A NUMBER ARRAY IS AS FOLLOWS:
;;; <GC AOBJN PTR> ;PROBABLY MEANINGLESS
;;; HEADER: PUSH P,CFIX1 ;CFLOAT1 FOR A FLONUM ARRAY
;;; JSP TT,<N>DIMF ;N=# OF DIMS
;;; <ADDRESS OF SAR> ;LH USED BY FLASH
;;; <DIMENSION 1>
;;; ...
;;; <DIMENSION N>
;;; DATA: <ENTRY 0> ;TTSAR POINTS HERE
;;; <ENTRY 1> ;FULL-WORD DATA 1/WD
;;; ...
;;; <ENTRY X>
;;; THE AOBJN POINTER AT THE TOP OF EACH ARRAY IS MEANINGFUL ONLY
;;; IF THE AS.GCP BIT IS 1 IN THE ARRAY'S ASAR; IT INDICATES
;;; WHAT ENTRIES IN THE ARRAY GC SHOULD MARK. FOR S-EXPRESSION
;;; ARRAYS, THIS IS GENERALLY THE ENTIRE ARRAY; FOR OBARRAYS,
;;; IT INCLUDES THE BUCKETS BUT NOT THE SCO TABLE. FOR
;;; READTABLES, WHICH ARE OTHERWISE FIXNUM ARRAYS, UNDER NEWRD
;;; THE GC AOBJN POINTER INDICATES THAT THE LIST OF CHARACTER
;;; MACRO FUNCTIONS SHOULD BE MARKED.
;;; NOTE THAT IF SUCH AN AOBJN POINTER IS OF THE FORM <-N>,,<DATA>,
;;; THEN 2*N ENTRIES ARE MARKED; THE LEFT HALF IS THE NUMBER
;;; OF WORDS TO BE MARKED, WITH TWO ENTRIES PER WORD.
;;; CORRESPONDS TO ARRAY TYPE BITS IN ASAR'S.
SUBTTL DEFINITIONS OF UUO'S
;;; NOTE: LERR < LER3 < ERINT < SERINT -- SEE ERRFRAME.
LERR=1←33 ;LISP ERROR; AC FIELD=0 => MSG IS SIXBIT, ELSE S-EXP
ACALL=2←33 ;KLUDGY FAST UUO FOR NCALLS TO ARRAYS
AJCALL=3←33 ;AJCALL:ACALL :: JCALL:CALL
LER3=4←33 ;EPRINT, THEN LERR
ERINT=5←33 ;A CORRECTABLE ERROR
PP=6←33 ;SEXP TYPE OUT FROM DDT
STRT=7←33 ;STRING TYPEOUT
SERINT=10←33 ;LIKE ERINT, BUT S-EXPRESSION MESSAGE.
TP=11←33 ;PRINTS ST ENTRY FOR A GIVEN LOCATION
IOJRST=12←33 ;JRST TO ADR AFTER PUTTING I/O ERROR MSG IN C
UUOMAX==12 ;NO OF ERROR-TYPE UUO'S
CALL=14←33 ;BASIC CALL FROM COMPILED CODE TO INTERFACE TO INTERPRETER
JCALL=CALL+1←33 ;4.1 BIT ON MEANS JRST TO FUNCTION RATHER THAN PUSHJ
CALLF=CALL+2←33 ;4.2 BIT ON MEANS NEVER CONVERT UUO INTO PUSHJ [OR JRST]
JCALLF=CALL+3←33
NCALL=20←33 ;4.5 BIT MEANS NUMBER FUNCTION CALL
NJCALL=NCALL+1←33
NCALLF=NCALL+2←33
NJCALF=NCALL+3←33
NUUOCLS==NJCALF←-33-CALL←-33
;;; SPECIAL INTERPRETATION OF STRT AC FIELD FOR QIO:
;;; AC FIELD OUTPUT TO
;;; 0 OUTFILES IF ↑R SET; TTY IF ↑W SET
;;; 17 MSGFILES
;;; X FILE(S) IN ACCUMULATOR X
;;; ERINT AND SERINT ARE DECODED BY THEIR ACCUMULATOR FIELDS.
;;; HERE ARE SOME SYMBOLS FOR REFERENCING THEM.
NERINT==0
IRPS X,,[UDF,UBV,WTA,UGT,WNA,GCL,FAC,IOL]
%!X=ERINT .IRPCNT,
%%!X=SERINT .IRPCNT,
DEFINE X CRUFT
%!X [SIXBIT ≤CRUFT≤]
TERMIN
NERINT==NERINT+1
TERMIN
;;; SHORT FORM ATOM WHAT IS IT?
;;;
;;; 0) UDF UNDEF-FNCTN UNDEFINED FUNCTION (FUNCTION IN A)
;;; 1) UBV UNBND-VRBL UNBOUND VARIABLE BEING EVAL'ED (ATOM IN A)
;;; 2) WTA WRNG-TYPE-ARGS WRONG TYPE OF ARGUMENTS FOR A FUNCTION (ARG IN A)
;;; 3) UGT UNSEEN-GO-TAG GO TO A TAG THAT'S NOT THERE (TAG IN A)
;;; 4) WNA WRNG-NO-ARGS WRONG NUMBER OF ARGS TO A FUNCTION (FORM IN A)
;;; 5) GCL GC-LOSSAGE GC LOST (A = NAME OF SPACE: LIST...)
;;; 6) FAC FAIL-ACT RANDOM LOSSAGE (ARG IS UP TO CALLER)
;;; 7) IOL IO-LOSSAGE ;QIO ONLY ;I/O LOSSAGE
SUBTTL FORMAT OF FILE ARRAYS
;;; FILE ARRAYS ARE ARRAYS WHICH HAVE THE AS.FIL BIT SET
;;; IN THE ASAR AND SOME EXTRA BITS IN THE TTSAR DESCRIBING
;;; THE TYPE OF ARRAY. PRESENTLY THERE EXIST SIX KINDS
;;; OF FILE ARRAY: ASCII INPUT, ASCII OUTPUT, TTY INPUT,
;;; TTY OUTPUT, BINARY INPUT, AND BINARY OUTPUT.
;;; A FILE ARRAY CONTAINS A NUMBER OF VARIABLES RELATED TO
;;; THE FILE, PLUS A BUFFER FOR DATA (EXCEPT FOR TTY).
;;; THE NAMES OF THE FILE ARRAY COMPONENTS INDICATE THE
;;; TYPES OF FILE ARRAYS TO WHICH THEY ARE APPLICABLE:
;;; F. ANY FILE ARRAY AI. ASCII INPUT ONLY
;;; FI. INPUT ONLY TI. TTY INPUT ONLY
;;; FO. OUTPUT ONLY XI. BINARY INPUT ONLY
;;; FA. ASCII ONLY AO. ASCII OUTPUT ONLY
;;; FT. TTY ONLY TO. TTY OUTPUT ONLY
;;; FX. BINARY ONLY XO. BINARY OUTPUT ONLY
;;; AX. ASCII/BINARY ONLY AT. ASCII/TTY ONLY
;;; FB. BLOCK MODE FC. CHAR (UNIT) MODE
;;; XXB. XX BLOCK MODE XXC. XX CHAR MODE
;;; NOTE: COMPONENTS MARKED (RELOC) MUST HAVE THEIR RIGHT
;;; HALVES RELOCATED WHEN THE ARRAY IS MOVED.
;;; THE FOLLOWING ARE INDICES INTO THE FILE ARRAY'S DATA AREA
;;; (I.E. THEY ARE USED TO INDEX THROUGH THE TTSAR).
FI.EOF==0 ;EOF FUNCTION
FO.EOP==0 ;END OF PAGE FUNCTION (BINARY N/A)
FJ.INT==0 ;INT FN FOR USR DEVICE
FI.BBC==1 ;BUFFERED BACK CHARS (BINARY N/A)
; LEFT HALF: SINGLE CHAR (3.8=1 IF ANY,
; SO CAN DISTINGUISH ↑@ FROM NONE)
.SEE $DEVICE
; RIGHT HALF: LIST OF CHARS
FI.BBF==2 ;LIST OF BUFFERED BACK FORMS (BINARY N/A)
TI.BFN==3 ;RH IS BUFFER-FORWARD FUNCTION FOR READ
FT.CNS==4 ;ASSOCIATED TTY FILE FOR OTHER DIRECTION
;SLOTS 5, 6, AND 7 ARE RESERVED FOR EXPANSION
F.GC==10 ;NUMBER OF SLOTS GC SHOULD EXAMINE
F.MODE==10 ;MODE BITS FOR OPEN
;FOR ITS:
FBT.CM==400000 ;4.9 0=BUFFERED, 1=CHARMODE
FBT.SA==200000 ;4.8 SAIL CHARS (AFFECTS CHARPOS)
FBT.CP==100000 ;4.7 CURSORPOS WILL SUCCEED (?);
; REFLECTS %TOMVU (CAN MOVE UP)
FBT.LN==40000 ;4.6 HANDLE TTY IN LINE MODE
FBT.AP==20000 ;4.5 OPENED IN APPEND MODE
FBT.EC==10000 ;4.4 OUTPUT TTY IN ECHO AREA
FBT.FR==4000 ;4.3 FORCE-FEED REQUIRED (INVERSE
; OF (STATUS TTYREAD))
FBT.SE==2000 ;4.2 TTY CAN SELECTIVELY ERASE
FBT.FU==1000 ;4.1 TTY SHOULD READ/PRINT FULL 12.-BIT
; CHARACTERS (FIXNUM MODE)
FBT.SI==400 ;3.9 USE SIOT FOR I/O TRANSFERS
; (ONLY IMPLEMENTED FOR OUTPUT NOW)
FBT.CA==40 ;3.6 CLA
;1.4-1.3 0=ASCII, 1=FIXNUM, 2=IMAGE
;1.2 0=DSK, 1=TTY
;1.1 0=INPUT, 1=OUTPUT
F.CHAN==11 ;I/O CHANNEL NUMBER
;;; FROM F.DEV TO F.RFN2 ARE USED BY JOB ARRAYS ALSO.
;;; MUST HAVE (F.DEV, F.SNM/F.PPN, F.FN1, F.FN2) IN THAT ORDER
F.DEV==12 ;DEVICE NAME
F.SNM==13 ;SNAME (ITS)
F.PPN==13 ;PROJ-PROG NUMBER (DEC-10)
F.FN1==14 ;FILE NAME 1
F.FN2==15 ;FILE NAME 2
F.RDEV==16 ;.RCHST'D DEVICE NAME
F.RSNM==17 ;.RCHST'D SNAME
F.RFN1==20 ;.RCHST'D FILE NAME 1
F.RFN2==21 ;.RCHST'D FILE NAME 2
F.FPOS==22 ;FILEPOS OF JUST BEYOND END OF BUFFER
; IN WORDS (CHARS FOR SINGLE ASCII)
;NOTE THAT AB.BP CONTAINS SOME FILEPOS
; INFO FOR BLOCK ASCII FILES
;-1 => NOT RANDOMLY ACCESSIBLE
LOPOFA==23 ;LENGTH OF PLAIN OLD FILE ARRAY (SEE ALFILE)
;;; BEWARE: .RCHST MAY CLOBBER FOLLOWING WORD OR TWO ALSO.
TI.ST1==23 ;TTY STATUS WORD 1 (ITS)
TI.ST2==24 ;TTY STATUS WORD 2 (ITS)
ATO.LC==24 ;NORMALLY ZERO:
; POSITIVE => LAST CHAR WAS /, NEXT
; MAY THEREFORE EXCEED LINEL
; NEGATIVE => LAST CHAR WAS CR,
; MAY NEED TO SUPPLY AN LF
AT.CHS==25 ;CHARPOS
AT.LNN==26 ;LINENUM
AT.PGN==27 ;PAGENUM
FO.LNL==30 ;LINE LENGTH (BINARY N/A)
;MAY BE NEGATIVE (SEE STERPRI)
FO.PGL==31 ;PAGE LENGTH (BINARY N/A)
;SLOTS 32-37 ARE RESERVED FOR EXPANSION
LONBFA==40 ;LENGTH OF NON-BUFFERED FILE ARRAY
;;; EVERYTHING AFTER THIS IS ONLY FOR FILES WITH BUFFERS
FB.BFL==40 ;BUFFER LENGTH
AB.CNT==41 ;CHAR COUNT WITHIN BUFFER (ITS)
FB.STS==41 ;FILE STATUS (DEC10)
AB.BP==42 ;BYTE POINTER (RELOC) (ITS)
XB.AOB==42 ;AOBJN POINTER FOR PICKING UP WORDS (RELOC) (ITS)
FB.NBF==42 ;USE BIT, SIZE, ADR NEXT BUF (RELOC) (DEC10)
FB.IOT==43 ;.IOT POINTER TO BUFFER (RELOC) (ITS)
FB.WDC==43 ;BOOKKEEPING, WORD COUNT (DEC10)
FB.BYT==44 ;LH OF INITIAL BYTE POINTER,,BYTES PER WORD (ITS)
;NOTE THAT @(17) BITS ARE ALWAYS ZERO
;SLOTS 45-47 ARE RESERVED FOR EXPANSION
FB.BUF==50 ;BEGINNING OF BUFFER
;FOR TTY INPUT, THE "BUFFER" IS AN ARRAY
; OF INTERRUPT FUNCTIONS FOR EACH CHAR
;;; FOR DEC-10 MUST USE THE DEVSIZ UUO TO GET BUFFER SIZE.
;;; THE FOLLOWING ARE THEREFORE ONLY FOR ITS.
;IRPC X,,[AXI]
;IRPC Y,,[DT]
;IRPC Z,,[IO]
ADIC.SZ==LONBFA
ADIB.BS==100 ;GOOD RANDOM SIZE
ADIB.SZ==FB.BUF+ADIB.BS
ADOC.SZ==LONBFA
ADOB.BS==100 ;GOOD RANDOM SIZE
ADOB.SZ==FB.BUF+ADOB.BS
ATIC.SZ==FB.BUF+NASCII/2 ;ROOM FOR INTERRUPT FUNCTIONS
ATIB.BS==-1
ATIB.SZ==-1 ;BLOCK MODE ILLEGAL
ATOC.SZ==LONBFA
ATOB.BS==100 ;GOOD RANDOM SIZE
ATOB.SZ==FB.BUF+ATOB.BS
XDIC.SZ==LONBFA
XDIB.BS==100 ;GOOD RANDOM SIZE
XDIB.SZ==FB.BUF+XDIB.BS
XDOC.SZ==LONBFA
XDOB.BS==100 ;GOOD RANDOM SIZE
XDOB.SZ==FB.BUF+XDOB.BS
XTIC.SZ==FB.BUF+NASCII/2 ;ROOM FOR INTERRUPT FUNCTIONS
XTIB.BS==-1
XTIB.SZ==-1 ;BLOCK MODE ILLEGAL
XTOC.SZ==LONBFA
XTOB.BS==100 ;GOOD RANDOM SIZE
XTOB.SZ==FB.BUF+XTOB.BS
IDIC.SZ==LONBFA
IDIB.BS==100 ;GOOD RANDOM SIZE
IDIB.SZ==FB.BUF+IDIB.BS
IDOC.SZ==LONBFA
IDOB.BS==100 ;GOOD RANDOM SIZE
IDOB.SZ==FB.BUF+IDOB.BS
ITIC.SZ==FB.BUF+NASCII/2 ;ROOM FOR INTERRUPT FUNCTIONS
ITIB.BS==-1
ITIB.SZ==-1 ;BLOCK MODE ILLEGAL
ITOC.SZ==LONBFA
ITOB.BS==100 ;GOOD RANDOM SIZE
ITOB.SZ==FB.BUF+ITOB.BS
;TERMIN
;TERMIN
;TERMIN
SUBTTL FORMAT OF JOB ARRAYS
;;; JOB ARRAYS ARE ARRAYS WHICH HAVE THE AS.JOB BIT SET
;;; IN THE ASAR. THE TTS.CL BIT IS RELEVANT HERE ALSO,
;;; INDICATING A CLOSED JOB ARRAY.
;;; THE ARRAY CONTAINS VARIOUS DATA ASSOCIATED WITH THE JOB.
;;; NOTE: COMPONENTS MARKED (RELOC) MUST HAVE THEIR RIGHT
;;; HALVES RELOCATED WHEN THE ARRAY IS MOVED.
;;; THE FOLLOWING ARE INDICES INTO THE FILE ARRAY'S DATA AREA
;;; (I.E. THEY ARE USED TO INDEX THROUGH THE TTSAR).
J.INTF==0 ;INTERRUPT FUNCTION (NEEDED BY INT SYSTEM)
J.CINT==1 ;CHANNEL INTERRUPT FUNCTION
J.LFNM==2 ;LOAD FILE NAMELIST?
J.GC==2 ;NUMBER OF SLOTS GC SHOULD EXAMINE
;SLOTS 3-12 RESERVED
;;; F.DEV THROUGH F.RFN2 (12 TO 21) APPLY TO JOB ARRAYS ALSO.
J.INTB==22 ;INTERRUPT BIT, OR ZERO FOR FOREIGN JOB
J.STAD==23 ;START ADDRESS
LOJOBA==100
J.SYMS==100 ;START OF SYMBOL TABLE, IF ANY